package cn.tedu.hm.mapper;

import cn.tedu.hm.pojo.entity.Room;

import cn.tedu.hm.pojo.vo.RoomListItemVO;
import cn.tedu.hm.pojo.vo.RoomStandardVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 说明：
 *
 * @author:ZhouYong
 * @Date: 2023/3/11
 **/
@Repository
public interface RoomMapper {

    /**
     * 插入房间数据
     *
     * @param room 房间数据
     * @return 受影响的行数
     */
   int insert(Room room);

    /**
     * 批量插入房间数据
     *
     * @param rooms 房间列表
     * @return 受影响的行数
     */
   int insertBatch(List<Room>rooms);

    /**
     * 根据id删除房间数据
     *
     * @param id 房间id
     * @return 受影响的行数
     */
  int deleteById(Long id);

    /**
     * 根据若干个id批量删除房间数据
     *
     * @param ids 若干个房间id的数组
     * @return 受影响的行数
     */
  int deleteByIds(Long[]ids);

    /**
     * 根据id修改房间数据
     *
     * @param room 封装了房间id和新数据的对象
     * @return 受影响的行数
     */
  int update(Room room);

    /**
     * 统计房间数据的数量
     *
     * @return 房间数据的数量
     */
   int count();
    /**
     * 根据房间名称统计数据的数量
     *
     * @param roomId 房间Id
     * @return 匹配名称的房间数据的数量
     */
    int countByRoomId( Integer roomId);

    /**
     * 根据房间名称统计数据的数量
     *
     * @param roomName 房间名称
     * @return 匹配名称的房间数据的数量
     */
   int countByName(String roomName);

    /**
     * 统计非某id但名称匹配的房间数据的数量，用于检查是否存在其它数据使用了相同的名称
     *
     * @param id   房间id
     * @param roomName 房间名称
     * @return 匹配名称但不匹配id的数据的数量
     */
    int countByNameAndNotId(@Param("id") Long id, @Param("roomName") String roomName);

    /**
     * 根据roomName查询房间数据详情
     *
     * @param roomName 房间名称
     * @return 匹配的房间数据详情，如果没有匹配的数据，则返回null
     */
   List<RoomStandardVO>  getStandardByRoomName(String roomName,Integer page,Integer pageSize);
   /**
     * 根据roomType查询房间数据详情
     *
     * @param type 房间类型
     * @return 匹配的房间数据详情，如果没有匹配的数据，则返回null
     */
   List<RoomStandardVO>  getStandardByRoomType(String type,Integer page,Integer pageSize);
 /** 根据roomName和roomType查询房间数据详情
     *
     * @param roomName 房间名称,type 房间类型
     * @return 匹配的房间数据详情，如果没有匹配的数据，则返回null
     */
   List<RoomStandardVO>  getStandardByRoomNameAndRoomType(String roomName,String type,Integer page,Integer pageSize);

    /**
     * 根据id查询房间数据详情
     *
     * @param id 房间id
     * @return 匹配的房间数据详情，如果没有匹配的数据，则返回null
     */
   RoomStandardVO getStandardById(Long id);

    /**
     * 查询房间数据列表
     *
     * @return 房间数据列表
     */

    List<RoomListItemVO> list();


}
